package cn.iocoder.yudao.module.vos.dal.mysql.tenantrequestlog;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.vos.controller.admin.tenantrequestlog.vo.TenantRequestLogPageReqVO;
import cn.iocoder.yudao.module.vos.dal.dataobject.tenantrequestlog.TenantRequestLogDO;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.vos.service.tenantrequestlog.vo.TenantRequestMonthlyBillAggDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 分表版本 Mapper：
 *  - 新增按表名的方法（insert/select），由 Service 决定 tableName
 *  - 原 selectPage(...) 基于固定表名的方法不再使用（保留不删，避免其他引用编译失败）
 */
@Mapper
public interface TenantRequestLogMapper extends BaseMapperX<TenantRequestLogDO> {

    // ========= 分表相关方法 =========

    void createTableIfNotExists(@Param("tableName") String tableName);

    int insertByTable(@Param("tableName") String tableName,
                      @Param("e") TenantRequestLogDO entity);

    List<TenantRequestLogDO> selectPageByTable(@Param("tableName") String tableName,
                                               @Param("req") TenantRequestLogPageReqVO reqVO,
                                               @Param("offset") Integer offset,
                                               @Param("limit") Integer limit);

    long selectCountByTable(@Param("tableName") String tableName,
                            @Param("req") TenantRequestLogPageReqVO reqVO);

    List<TenantRequestLogDO> selectListByTableNoPage(@Param("tableName") String tableName,
                                                     @Param("req") TenantRequestLogPageReqVO reqVO);

    // ========= 旧接口（固定表名）- 不再使用 =========
    // PageResult<TenantRequestLogDO> selectPage(TenantRequestLogPageReqVO reqVO);

    // 月度账单聚合（按 request_type + secret_id）
    List<TenantRequestMonthlyBillAggDO> selectMonthlyBillByTable(@Param("tableName") String tableName);

    // 表是否存在
    Integer existsTable(@Param("tableName") String tableName);
}
